package PruebasUnitarias;

import junit.framework.TestCase;
import Modelo.*;

public class CaidaTest extends TestCase {

	private Bloque[][] bloques;
	private Mapa mapa;
	
	protected void setUp() throws Exception {
		super.setUp();
		mapa= new Mapa(); 
		bloques= new Bloque[10][3];
		
		for(int i=0;i<10;i++)
			for(int j=0;j<3;j++)
				if(i<8)
					bloques[i][j]= new Vacio(mapa);
				else
					bloques[i][j]= new Tierra(mapa);
		mapa.inicializarMapa(bloques);
	}
	
	public void testEsEjecutableSobre(){
		PoseedorDeHabilidad pooglin = new Pooglin(mapa);
		Habilidad caida=new Caida();
		pooglin.asignarHabilidad(caida);
		bloques[1][1].alojar(pooglin);
		assertTrue(caida.esEjecutableSobre(pooglin));
		bloques[1][1].desalojar(pooglin);
		bloques[7][1].alojar(pooglin);
		assertTrue(bloques[8][1].esFirme());
		assertFalse(caida.esEjecutableSobre(pooglin));
	}
	
	public void testEjecutarSobre(){
		PoseedorDeHabilidad pooglin = new Pooglin(mapa);
		Habilidad caida=new Caida();
		pooglin.asignarHabilidad(caida);
		
		// caigo de 5 bloques (no muero)
		bloques[3][1].alojar(pooglin);
		while(caida.esEjecutableSobre(pooglin)){
			caida.ejecutarSobre(pooglin);
		}
		assertFalse(mapa.getBloqueDondeEsta(pooglin)==bloques[3][1]);
		assertTrue(mapa.getBloqueDondeEsta(pooglin)==bloques[7][1]);
		assertTrue(pooglin.estaVivo());
		bloques[7][1].desalojar(pooglin);
		
		// caigo de 6 bloques (muero)
		bloques[2][1].alojar(pooglin);
		while(caida.esEjecutableSobre(pooglin)){
			caida.ejecutarSobre(pooglin);
		}
		assertFalse(mapa.getBloqueDondeEsta(pooglin)==bloques[2][1]);
		assertTrue(mapa.getBloqueDondeEsta(pooglin)==bloques[7][1]);
		assertFalse(pooglin.estaVivo());
	}		
}
